layui.define(['layer', 'form', 'element', 'upload', 'util', 'table', 'laytpl'], function (exports) {
    var $ = layui.jquery
        , layer = parent.layer === undefined ? layui.layer : top.layer
        , form = layui.form
        , laytpl = layui.laytpl
        , element = layui.element;
    $.fn.extend({
        serializeObject: function () {
            var o = {};
            var a = this.serializeArray();
            $.each(a, function () {
                if (o[this.name]) {
                    if (!o[this.name].push) {
                        o[this.name] = [o[this.name]];
                    }
                    o[this.name].push(this.value || '');
                } else {
                    o[this.name] = this.value || '';
                }
            });
            return o;
        }
    });
    $.fn.extend({
        initForm: function (options) {
            //默认参数
            var defaults = {
                jsonValue: "",
                isDebug: false   //是否需要调试，这个用于开发阶段，发布阶段请将设置为false，默认为false,true将会把name value打印出来
            };
            //设置参数
            var setting = $.extend({}, defaults, options);
            var form = this;
            var jsonValue = setting.jsonValue;
            //如果传入的json字符串，将转为json对象
            if ($.type(setting.jsonValue) === "string") {
                jsonValue = $.parseJSON(jsonValue);
            }
            //如果传入的json对象为空，则不做任何操作
            if (!$.isEmptyObject(jsonValue)) {
                var debugInfo = "";
                $.each(jsonValue, function (key, value) {
                    //是否开启调试，开启将会把name value打印出来
                    if (setting.isDebug) {
                        console.log("name:" + key + "; value:" + value);
                        debugInfo += "name:" + key + "; value:" + value + " || ";
                    }
                    var formField = form.find("[name='" + key + "']");
                    if ($.type(formField[0]) === "undefined") {
                        if (setting.isDebug) {
                            console.log("can not find name:[" + key + "] in form!!!");    //没找到指定name的表单
                        }
                    } else {
                        var fieldTagName = formField[0].tagName.toLowerCase();
                        if (fieldTagName == "input") {
                            if (formField.attr("type") == "radio") {
                                $("input:radio[name='" + key + "'][value='" + value + "']").attr("checked", "checked");
                            } else if (formField.attr("type") == "checkbox") {
                                if (value) {
                                    $("input:checkbox[name='" + key + "']").trigger('click');
                                }
                            } else {
                                formField.val(value);
                            }
                        } else if (fieldTagName == "select") {
                            //do something special
                            formField.val(value);
                        } else if (fieldTagName == "textarea") {
                            //do something special
                            formField.val(value);
                        } else {
                            formField.val(value);
                        }
                    }
                });
                if (setting.isDebug) {
                    console.log(debugInfo);
                }
            }
            return form;    //返回对象，提供链式操作
        }
    });
    /**
     * 日期格式化
     * @param {Object} format
     */
    Date.prototype.format = function (format) {
        var o = {
            "M+": this.getMonth() + 1, //month
            "d+": this.getDate(), //day
            "h+": this.getHours(), //hour
            "m+": this.getMinutes(), //minute
            "s+": this.getSeconds(), //second
            "q+": Math.floor((this.getMonth() + 3) / 3), //quarter
            "S": this.getMilliseconds() //millisecond
        }
        if (/(y+)/.test(format))
            format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var k in o)
            if (new RegExp("(" + k + ")").test(format))
                format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
        return format;
    }
    var common = {
        getEditorConfig: function () {
            var editorConfig = [
                'fontfamily', //字体
                'fontsize', //字号
                'paragraph', //段落格式
                'justifyleft', //居左对齐
                'justifyright', //居右对齐
                'justifycenter', //居中对齐
                'justifyjustify', //两端对齐
                'forecolor', //字体颜色
                'undo', //撤销
                'redo', //重做
                'bold', //加粗
                'indent', //首行缩进
                //'snapscreen', //截图
                'italic', //斜体
                'underline', //下划线
                'strikethrough', //删除线
                'subscript', //下标
                'fontborder', //字符边框
                'superscript', //上标
                'formatmatch', //格式刷
                'anchor', //锚点
                'source', //源代码
                'blockquote', //引用
                'pasteplain', //纯文本粘贴模式
                'selectall', //全选
                //'print', //打印
                'horizontal', //分隔线
                'removeformat', //清除格式
                'time', //时间
                'date', //日期
                'unlink', //取消链接
                //'insertrow', //前插入行
                //'insertcol', //前插入列
                //'mergeright', //右合并单元格
                //'mergedown', //下合并单元格
                //'deleterow', //删除行
                //'deletecol', //删除列
                //'splittorows', //拆分成行
                //'splittocols', //拆分成列
                //'splittocells', //完全拆分单元格
                //'deletecaption', //删除表格标题
                'inserttitle', //插入标题
                //'mergecells', //合并多个单元格
                //'deletetable', //删除表格
                'cleardoc', //清空文档
                //'insertparagraphbeforetable', //"表格前插入行"
                //'insertcode', //代码语言
                'simpleupload', //单图上传
                'insertimage', //多图上传
                //'edittable', //表格属性
                //'edittd', //单元格属性
                'link', //超链接
                //'emotion', //表情
                'spechars', //特殊字符
                'searchreplace', //查询替换
                //'map', //Baidu地图
                //'gmap', //Google地图
                //'insertvideo', //视频
                'backcolor', //背景色
                'insertorderedlist', //有序列表
                'insertunorderedlist', //无序列表
                'fullscreen', //全屏
                'directionalityltr', //从左向右输入
                'directionalityrtl', //从右向左输入
                'rowspacingtop', //段前距
                'rowspacingbottom', //段后距
                //'pagebreak', //分页
                //'insertframe', //插入Iframe
                //'imagenone', //默认
                //'imageleft', //左浮动
                //'imageright', //右浮动
                'attachment', //附件
                'imagecenter', //居中
                'wordimage', //图片转存
                'lineheight', //行间距
                'edittip ', //编辑提示
                //'customstyle', //自定义标题
                'autotypeset', //自动排版
                //'webapp', //百度应用
                //'touppercase', //字母大写
                //'tolowercase', //字母小写
                //'background', //背景
                //'template', //模板
                //'scrawl', //涂鸦
                //'music', //音乐
                //'inserttable', //插入表格
                //'drafts', // 从草稿箱加载
                //'charts', // 图表
                'preview', //预览
                'help' //帮助
            ];
            return editorConfig;
        },
        showSuccessTips: function (msg, cb) {
            if (!msg) {
                msg = '保存成功';
            }
            //登入成功的提示与跳转
            layer.msg(msg, {
                offset: 't'
                , icon: 1
                , time: 1000
            }, function () {
                if (cb) {
                    cb();
                }
            });
        },
        showTimeTips: function () {
            $("#emr_app .loading",parent.document).show();
            $("#emr_app .loading",parent.document).fadeOut(3000);
        },
        showErrorTips: function (msg, cb) {
            layer.msg(msg, {offset: 't'}, function () {
                if (cb) {
                    cb();
                }
            });
        },
        getArrayObject: function (dataArray, key, value) {
            var obj;
            if (dataArray && dataArray.length > 0) {
                $.each(dataArray, function (i, item) {
                    if (item[key] == value) {
                        obj = item;
                        return false;
                    }
                })
            }
            return obj;
        },
        getArrayIndex: function (dataArray, key, value) {
            var index = -1;
            if (dataArray && dataArray.length > 0) {
                $.each(dataArray, function (i, item) {
                    if (item[key] == value) {
                        index = i;
                        return false;
                    }
                })
            }
            return index;
        },
        hasChild: function (dataArray, id, key) {
            var flag = false;
            $.each(dataArray, function (i, item) {
                if (item[key] == id) {
                    flag = true;
                    return false;
                }
            });
            return flag;
        },
        initSelect: function (tpl, target, data) {
            laytpl(tpl).render(data, function (html) {
                target.append(html);
                form.render('select');
            });
        }
    };

    exports('common', common);
});